<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
		"http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<title>doh.robot Menu Keyboard Tests</title>

		<style>
			@import "../../../util/doh/robot/robot.css";
		</style>

		<!-- required: dojo.js -->
		<script type="text/javascript" src="../../../dojo/dojo.js"
			djConfig="isDebug: true, parseOnLoad: true"></script>

		<!-- functions to help test -->
		<script type="text/javascript" src="../helpers.js"></script>

		<script type="text/javascript">
			dojo.require("dijit.robotx");

			dojo.addOnLoad(function(){
				doh.robot.initRobot('../test_Menu.html');

				if(!(dojo.isSafari < 4)){ // Tab-focus not well supported on old Safari
				doh.register("dijit.MenuBar general keyboard tests",[
					{
						name: "start focus on the link, outside of menubar",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							// Start at the link
							doh.robot.sequence(function(){
								dijit.focus(dojo.byId("link"));
							}, 500, 500);

							doh.robot.sequence(d.getTestCallback(function(){
								doh.t(dojo.global.dijit._curFocus, "something has focus");
								doh.is("random link", dojo.global.dijit._curFocus.innerHTML, "check that focus is on the link");
							}), 1000);

							return d;
						}
					},

					{
						name: "tab to the menubar",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							// tab to the MenuBar... then focus should automatically shift to "File" menu,
							doh.robot.keyPress(dojo.keys.TAB, 500, {});

							doh.robot.sequence(d.getTestCallback(function(){
								doh.is("File", dojo.trim(dojo.global.dijit._curFocus.innerText || dojo.global.dijit._curFocus.textContent),
										"check that focus is on File menu");
							}), 1000);

							return d;
						}
					},

					{
						name: "arrow to the edit menu",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							doh.robot.keyPress(dojo.keys.RIGHT_ARROW, 500, {});		// TODO: use left arrow in RTL mode

							doh.robot.sequence(d.getTestCallback(function(){
								doh.is("Edit", dojo.trim(dojo.global.dijit._curFocus.innerText || dojo.global.dijit._curFocus.textContent),
										"check that focus is on Edit MenuItem");
							}), 1000);

							return d;
						}
					},

					{
						name: "shift-tab back",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							doh.robot.keyPress(dojo.keys.TAB, 500, {shift:true});

							doh.robot.sequence(d.getTestCallback(function(){
								doh.is("random link", dojo.trim(dojo.global.dijit._curFocus.innerText || dojo.global.dijit._curFocus.textContent),
										"check that focus is back on the link");
							}), 1000);

							return d;
						}
					},

					{
						name: "open file menu",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							// Start at the link
							doh.robot.sequence(function(){
								dijit.focus(dojo.byId("link"));
							}, 500, 500);

							// tab to the MenuBar... then focus should automatically shift to "File" menu
							doh.robot.keyPress(dojo.keys.TAB, 500, {});

							// and then down arrow to menu... focus should go to "New"
							doh.robot.keyPress(dojo.keys.DOWN_ARROW, 500, {});

							doh.robot.sequence(d.getTestCallback(function(){
								doh.t((dojo.global.dijit._curFocus.innerText || dojo.global.dijit._curFocus.textContent).indexOf("New") >= 0,
										"check that focus is on New menu item of the File menu (indirectly checks that menu is visible)");
							}), 1000);

							return d;
						}
					},

					{
						name: "click 'new' using enter key",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							var clicked = false;
							dijit.byId("new").onClick = function(){ clicked = true; };

							doh.robot.keyPress(dojo.keys.ENTER, 500, {});

							doh.robot.sequence(d.getTestCallback(function(){
								doh.t(clicked, "new was clicked");
								doh.t(isHidden("fileMenu"), "File menu disappeared");
								doh.f(dojo.hasClass("file", "dijitMenuItemSelected"),
									"File MenuBarItem should no longer have selected effect, actual class is: " + dojo.byId("edit").className);
							}), 1000);

							return d;
						}
					},

					{
						name: "open submenu",
						timeout: 8000,
						runTest: function(){
							var d = new doh.Deferred();

							// Start at the link
							doh.robot.sequence(function(){
								dijit.focus(dojo.byId("link"));
							}, 500, 500);

							// tab to the MenuBar... then focus should automatically shift to "File" menu item
							doh.robot.keyPress(dojo.keys.TAB, 500, {});

							// and then move to "View" menu item
							doh.robot.keyPress(dojo.keys.RIGHT_ARROW, 500, {});
							doh.robot.keyPress(dojo.keys.RIGHT_ARROW, 500, {});

							// open the menu
							doh.robot.keyPress(dojo.keys.DOWN_ARROW, 500, {});
							// go down to "Zoom" menu item
							doh.robot.keyPress(dojo.keys.DOWN_ARROW, 1000, {});
							doh.robot.keyPress(dojo.keys.DOWN_ARROW, 500, {});

							// open the submenu (landing on first item)
							doh.robot.keyPress(dojo.keys.RIGHT_ARROW, 500, {});

							doh.robot.sequence(d.getTestCallback(function(){
								doh.t( (dojo.global.dijit._curFocus.innerText || dojo.global.dijit._curFocus.textContent).indexOf("50%") >= 0,
										"check that focus is on '50%'");
								doh.robot.keyPress(dojo.keys.ENTER, 0, {}, true); // close popup menus
							}), 1000, 500);

							return d;
						}
					}
				]);

				// Using left-arrow to back up (#10437)
				doh.register("dijit.MenuBar left arrow tests",[
					{
						name: "start focus on the link, outside of menubar",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							// Start at the link
							doh.robot.sequence(function(){
								dijit.focus(dojo.byId("link"));
							}, 500, 500);

							doh.robot.sequence(d.getTestCallback(function(){
								doh.t(dojo.global.dijit._curFocus, "something has focus");
								doh.is("random link", dojo.global.dijit._curFocus.innerHTML, "check that focus is on the link");
							}), 1000);

							return d;
						}
					},

					{
						name: "tab to the menubar",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							// tab to the MenuBar... then focus should automatically shift to "File" menu,
							doh.robot.keyPress(dojo.keys.TAB, 500, {});

							doh.robot.sequence(d.getTestCallback(function(){
								doh.is("File", dijit.getEnclosingWidget(dojo.global.dijit._curFocus).label,
										"check that focus is on File MenuItem");
							}), 1000);

							return d;
						}
					},

					{
						name: "arrow to the view menu",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							doh.robot.keyPress(dojo.keys.RIGHT_ARROW, 500, {});		// TODO: use left arrow in RTL mode
							doh.robot.keyPress(dojo.keys.RIGHT_ARROW, 500, {});		// TODO: use left arrow in RTL mode

							doh.robot.sequence(d.getTestCallback(function(){
								doh.is("View", dojo.trim(dojo.global.dijit._curFocus.innerText || dojo.global.dijit._curFocus.textContent),
										"check that focus is on View MenuItem");
							}), 1000);

							return d;
						}
					},

					{
						name: "down to the zoom menuitem",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							doh.robot.keyPress(dojo.keys.DOWN_ARROW, 500, {});	// focuses "Normal", first menu item
							doh.robot.keyPress(dojo.keys.DOWN_ARROW, 500, {});	// focuses "Outline", second menu item
							doh.robot.keyPress(dojo.keys.DOWN_ARROW, 500, {});	// focuses "Zoom", third menu item

							doh.robot.sequence(d.getTestCallback(function(){
								doh.is("Zoom", dijit.getEnclosingWidget(dojo.global.dijit._curFocus).label,
										"check that focus is on Zoom MenuItem");
							}), 1000);

							return d;
						}
					},
					
					{
						name: "open the zoom menu",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							doh.robot.keyPress(dojo.keys.RIGHT_ARROW, 500, {});

							doh.robot.sequence(d.getTestCallback(function(){
								doh.is("50%", dijit.getEnclosingWidget(dojo.global.dijit._curFocus).label,
										"check that focus is on Zoom MenuItem");
							}), 1000);

							return d;
						}
					},

					{
						name: "close Zoom menu, back to View menu",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							doh.robot.keyPress(dojo.keys.LEFT_ARROW, 500, {});

							doh.robot.sequence(d.getTestCallback(function(){
								doh.is("Zoom", dijit.getEnclosingWidget(dojo.global.dijit._curFocus).label,
										"check that focus is on Zoom MenuItem");
										
								doh.is(0, dojo.query("#zoomMenu .dijitMenuItemSelected").length,
									"dijitMenuItemSelected removed from Zoom Menu")
							}), 1000);

							return d;
						}
					},
					
					{
						name: "close View menu, back to MenuBar",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							// This should move focus to "Edit" in the MenuBar, which then opens
							// the drop down and focuses on the first item (Cut)
							doh.robot.keyPress(dojo.keys.LEFT_ARROW, 500, {});

							doh.robot.sequence(d.getTestCallback(function(){
								doh.is("Cut", dijit.getEnclosingWidget(dojo.global.dijit._curFocus).label,
										"check that focus is on first MenuItem in Edit Menu");

								doh.is(0, dojo.query("#viewMenu .dijitMenuItemSelected").length,
									"dijitMenuItemSelected removed from View Menu")
							}), 1000);

							return d;
						}
					}
				]);

				// Run test about opening context menu via keyboard, except on safari/mac where that isn't
				// possible (#9927)
				if (!dojo.isMac || !dojo.isWebKit) {
					doh.register("Context menu keyboard tests", [{
						name: "open global context menu (keyboard)",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							// Put focus on the link; this is just a random place on the screen to have focus
							doh.robot.sequence(function(){
								dijit.focus(dojo.byId("link"));
							}, 500, 500);

							// open via keyboard
							if(dojo.isMac){
								doh.robot.keyPress(dojo.keys.SPACE, 500, {
									ctrl: true
								});
							}else{
								doh.robot.keyPress(dojo.keys.F10, 500, {
									shift: true
								});
							}


							doh.robot.sequence(d.getTestCallback(function(){
								var menu = dijit.byId("windowContextMenu");
								doh.t(isVisible(menu), "menu is now shown");

								var menuCoords = dojo.position(menu.domNode),
									linkCoords = dojo.position("link");

								doh.t(menuCoords.x < 100, "x < 100", "actual x: " + menuCoords.x);
								doh.t(menuCoords.y < 50, "y < 50", "actual y: " + menuCoords.y);
								doh.t(menuCoords.x >= 0, "x >= 0", "actual x: " + menuCoords.x);
								doh.t(menuCoords.y >= 0, "y >= 0", "actual y: " + menuCoords.y);
								doh.robot.keyPress(dojo.keys.ESCAPE, 0, {}, true); // close context menu
							}), 1000);

							return d;
						}
					}]);
				}

				doh.register("Cancellation (ESCAPE) tests", [
					{
						name: "MenuBar selection and cancellation",
						timeout: 20000,
						runTest: function(){
							var d = new doh.Deferred();

							// Start at the link
							doh.robot.sequence(function(){
								dijit.focus(dojo.byId("link"));
							}, 500, 500);

							// tab to the MenuBar... then focus should automatically shift to "File" menu,
							doh.robot.keyPress(dojo.keys.TAB, 500, {});

							doh.robot.keyPress(dojo.keys.DOWN_ARROW, 500, {}); // open File menu

							doh.robot.sequence(d.getTestErrback(function(){
								doh.t(isVisible("fileMenu"), "File menu should be visible");
							}), 1000);

							doh.robot.keyPress(dojo.keys.ESCAPE, 500, {}); // close File menu
							doh.robot.sequence(d.getTestErrback(function(){
								doh.t(isHidden("fileMenu"), "File menu is hidden after cancel");
								doh.t(dojo.hasClass("file", "dijitMenuItemSelected"),
									"File MenuBarItem should have selected class, actual class is: " + dojo.byId("file").className);
							}), 1000);

							doh.robot.keyPress(dojo.keys.RIGHT_ARROW, 500, {}); // move to Edit menu
							doh.robot.sequence(d.getTestErrback(function(){
								doh.f(dojo.hasClass("file", "dijitMenuItemSelected"),
									"File MenuBarItem should not have selected class, actual class is: " + dojo.byId("file").className);
								doh.t(isHidden("editMenu"), "Edit menu is hidden after cancel and select");
								doh.t(dojo.hasClass("edit", "dijitMenuItemSelected"),
									"Edit MenuBarItem should have selected class, actual class is: " + dojo.byId("edit").className);
							}), 1000);

							doh.robot.keyPress(dojo.keys.DOWN_ARROW, 500, {}); // open Edit menu
							doh.robot.keyPress(dojo.keys.DOWN_ARROW, 1000, {}); // move to copy more slowly
							doh.robot.keyPress(dojo.keys.DOWN_ARROW, 500, {}); // move to paste option
							doh.robot.keyPress(dojo.keys.ENTER, 500, {}); // click paste, closing edit menu

							doh.robot.sequence(d.getTestErrback(function(){
								doh.t(isHidden("editMenu"), "edit menu disappeared");
								dijit.focus(dojo.byId("link"));
							}), 1000, 500);

							// tab to the MenuBar... then focus should automatically shift to "File" menu,
							doh.robot.keyPress(dojo.keys.TAB, 500, {}); // move to File
							doh.robot.sequence(d.getTestErrback(function(){
								doh.t(isHidden("fileMenu"), "File menu should be hidden");
							}), 1000);

							doh.robot.keyPress(dojo.keys.DOWN_ARROW, 500, {}); // open File menu
							doh.robot.sequence(d.getTestErrback(function(){
								doh.t(isVisible("fileMenu"), "File menu should be visible");
							}), 1000);

							doh.robot.keyPress(dojo.keys.RIGHT_ARROW, 75, {}); // #9846
							doh.robot.keyPress(dojo.keys.RIGHT_ARROW, 75, {}); // move to View menu
							doh.robot.keyPress(dojo.keys.LEFT_ARROW, 75, {}); // move to Edit menu
							doh.robot.sequence(d.getTestErrback(function(){
								doh.t(isVisible("editMenu"), "Edit menu should be visible and File menu hidden");
								doh.t(isHidden("fileMenu"), "File menu should be hidden and Edit menu visible");
							}), 1000);

							doh.robot.keyPress(dojo.keys.ESCAPE, 500, {}); // close Edit menu

							doh.robot.sequence(d.getTestCallback(function(){
								doh.t(isHidden("editMenu"), "edit menu disappeared");
							}), 1000);

							return d;
						}
					}
				]);
				} // !dojo.isSafari
				doh.run();
			});
		</script>
	</head>
</html>
